package com.sacodemel.financeiro.persistencia.dao.impl;

import com.sacodemel.financeiro.persistencia.dao.impl.BaseDAO;
import com.sacodemel.financeiro.modelo.RegistroCaixa;
import com.sacodemel.financeiro.modelo.dto.InvestimentoDTO;

import com.sacodemel.financeiro.persistencia.dao.IFluxoDeCaixaDAO;
import com.sacodemel.financeiro.util.Constantes;
import com.sacodemel.financeiro.util.JSFUtil;
import java.util.Date;
import java.util.List;

import org.hibernate.Session;

public class FluxoDeCaixaDAO extends BaseDAO<RegistroCaixa> implements IFluxoDeCaixaDAO {

    public FluxoDeCaixaDAO() {
        super(RegistroCaixa.class);

    }

    @Override
    public List<RegistroCaixa> obterFluxoDeCaixa(String filtroTipoRegistro, String filtroPalavraChave, Date filtroDataInicio, Date filtroDataFim, String filtroTipoReceita, String filtroInvestidor) throws Exception {
        Session session = null;
        try {
            session = getSession();

            session.beginTransaction();
            
            List<RegistroCaixa> obj = (List<RegistroCaixa>) session.createQuery(
                     " from RegistroCaixa r " 
                    + " left  join fetch  r.investidor  "
                    + " where r.status = '" + Constantes.STATUS_ATIVO + "' "
                    + retornaCondicoesPesquisa(filtroTipoRegistro, filtroPalavraChave, filtroDataInicio, filtroDataFim, filtroTipoReceita, filtroInvestidor)
             ).list();

            return obj;

        } catch (Exception e) {
            throw e;
        } finally {
            close(session);
        }
    }

    private String retornaCondicoesPesquisa(String filtroTipoRegistro, String filtroPalavraChave, Date filtroDataInicio, Date filtroDataFim, String filtroTipoReceita, String filtroInvestidor) {

        String sql = "";
        
        if (isPreenchido(filtroTipoRegistro)){
          sql = sql + " and r.tipoRegistroCaixa='"+filtroTipoRegistro+"'";  
        }
        
        if (isPreenchido(filtroPalavraChave)){
          sql = sql + " and r.observacao like '%"+filtroPalavraChave+"%'";
        }
        
        if (filtroDataInicio!=null && isPreenchido(filtroDataInicio.toString())){
          sql = sql + " and r.dataOperacao between '" + JSFUtil.formataDataBanco(filtroDataInicio)  +"' and '"+ JSFUtil.formataDataBanco(filtroDataFim) +"'";
        }
        
        if (isPreenchido(filtroTipoReceita)){
          sql = sql + " and r.origemReceita='"+filtroTipoReceita+"'";  
       }
        
        if (isPreenchido(filtroInvestidor)){
          sql = sql + " and r.investidor.id="+filtroInvestidor;  
        }
        
        
        
        return sql;
        
    }
    
    private boolean isPreenchido(String parametro){
        return parametro!=null && !"".equals(parametro);
        
    }
    
}
